package Day010_排序算法_异常.demo05_finally代码块;

/*
    finally：有一些特定的代码无论异常是否发生，都需要执行。另外，因为异常会引发程序跳转，导致有些语句执行不到。
    而finally就是解决这个问题的，在finally代码块中存放的代码都是一定会被执行的。

    finally的语法:
                try{
                     编写可能会出现异常的代码
                     } catch(异常类型  变量名){
                        处理异常的代码
                         //记录日志/打印异常信息/继续抛出异常
                       } finally{
                           一般情况下,永远都会执行
                        }
               执行步骤:
                    1.首先执行try中的代码,如果出现异常,那么直接执行catch中的代码,执行完后,还会执行finally中的代码,程序继续向下执行
                    2.如果没有出现异常,那么直接跳过catch中的代码,但是还会执行finally中的代码,程序继续向下执行

                注意:
                    1.finally不能单独使用。
                    2.无论try中代码是否有异常,finally中都会执行
                    3.finally中一般是写释放资源的代码--->(IO流异常处理)

    比如在我们之后学习的IO流中，当打开了一个关联文件的资源，最后程序不管结果如何，都需要把这个资源关闭掉。
 */

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
    public static void main(String[] args) {

        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date date = new Date();
            //date = sdf.parse("1999-01-11"); //编译异常,声明/捕获处理异常后编译无异常,无异常的情况下,不会打印"出现异常..."

            date = sdf.parse("1999年01月11日"); //出现异常,try中出现异常位置后的代码不会执行

            System.out.println(date);
        } catch (ParseException e) {  // 不知道的可以写 Throwable/Exception 是所有异常的父类
            //处理异常的代码,或打印异常的信息
            System.out.println("出现异常...");
            return; //退出方法,不会继续执行,但是finally仍会执行!
        } finally {
            System.out.println("finally代码块...");
        }
        System.out.println("结束了");
    }
}
